package ww;

public class J15_OOP1 {
	
	// 객체지향 개발 기법
	// OOP : 객체를 기반으로 프로그램을 작성하는 것 
	// OOP 언어로 응용 프로그램을 개발하는 경우,
	// 문제 해경를 위해 실제 상황과 유사한 모델을 만들어야 함
	// 예를 들어, 직원 세금을 계산하는 프로그램 작성
	// 프로그램에서 회사를 표현하는 회사객체가 필요
	// 또한, 직원을 나타내는 직원 객체, 세금을 나타내는 세금 객체도 필요
	// 회사 , 직원, 세금 객체를 자바 프로그램에서 코드로 나타내는 방법에 대해 알아봄
	
	// 모든 객체에는 2가지 성질이 있음
	// [속성 property], 객체가 할수 있는 [행동 action]
	// 현실세계의 존재하는 객체를 자바언어로 가져오는 경우에도 속성하고 행위를 가지고 있어야함
	// 자바에서 속성은 fiele, 행위는 method 라고 함
	// 단, 필드와 메서드는 선택사항(생략가능)임
	
	// 자바 객체를 만드는 방법은? - 설계도를 이용
	// '차'라는 객체를 잘 만들려면
	// 좋은 차로 만들어주는는설계도를 참고
	// OOP 에서 객체를 만들어 주는 설계도를[클래스]라 함
	// 청사진/설계도 또는 템플릿임(중요)
	// 붕어빵 - 객체
	// 붕어빵 틀 - 클래스
	// 밀가루 , 팥 - 속성 
	// 클래스는 당신이 만드려는 객체의 종류를 결정함
	// 요약하자면, 클래스는 프로그래머로 하여금
	// 문제의 추상화로 만들수 있게 해주는 OOP도구임
	// OOP에서 추상화 abbstraction는 실제객체를 표현하기 위해 실제 객체에서 핵심적인 
	// 개념 또는 기능을 뽑아 프로그래밍 객체로 만드는 행위를 말함
	
	// 클래스는 자바 프로그램의 기본 뼈대
	// 자바 초보자는 클래스를 작성할 떄
	// 클래스이름, 필드, 메서드 등을 고려할 것
	// 클래스 만들기 
	// class 클래스 이름 {
	// 	  클래스 몸체 (필드,메서드)
	// }
	// 클래스이름은 반드시 대문자로 시작
	// 클래스 정의시 클래스 이름과 파일 이름은
	// 동일 해야함
	// 클래스 내에 선언된 변수를 필드(fiele) 라고 함
	
	
	public static void main(String[] args) {
		// 학생 객체 생성
		// 생성자를 이용한 학생 객체 생성
		student one = new student();
		System.out.println(one.name);
		
		student two = new student();
		System.out.println(one.name);
		
		TerranUnit t = new TerranUnit();
		System.out.println("방어력 :" +t.shield);
		System.out.println("생명력 : " +t.life);
		System.out.println("에너지 : " +t.energy);
		System.out.println("사거리:" + t.range);
		System.out.println("공격형태 :" + t.sp);
		/*String name = "전제복";
		int stdno = 123456789;
		String addr= "강원도 강릉시 남문동";
		int mp = 1234567890;
		
		String name2 = "잉여";
		int stdno2 = 123456789;
		String addr2= "강원도 강릉시 포남동";
		int mp2 = 345678901;
		// 클래스를 이용해서 학생 객체 생성
		student wpqhr = new student();
		wpqhr.name = "제복";
		wpqhr.stdno = 123456789;
		wpqhr.addr = "강원도 강릉시 남문동";
		wpqhr.mp = 1234567890;
		
		student dlddu = new student();
		dlddu.name = "잉여";
		dlddu.stdno = 123456789;
		dlddu.addr = "강원도 강릉시 포남동";
		dlddu.mp = 345678901;*/
		
	} // main

} // class
//학생 클래스 정의
class student {
	// 필드 선언
	String name;
	int stdno;
	String addr;
	int mp;
	// 생성자 추가 - 객체를 초기화 하는데 사용
	public student() {
		stdno = 12345;
		name = "아무개";
		addr = "서울";
		mp = 987654;
	}
	
}
// 고객 (Customer)클래스
// 아이디, 비밀번호, 이름 , 주소, 전화번호, 이메일
class Customer {
	String id;
	String pass;
	String name;
	String addr;
	String mp;
	String email;
}

// 상품 (Product) 클래스
// 상품명 , 가격, 종류, 제조사 , 상품번호
class Product {
	String name;
	int price;
	String type;
	String maker;
	int number;
	
}

// 스타크래프트 2의 테란 유닛(TerranUnit)을 클래스로 정의
// 생명력, 에너지 , 방어력, 광물, 베스핀 , 보급품, 생산 시간
class TerranUnit{
	int life;
	int energy;
	String shield;
	int  meneral;
	int gas;
	int supply;
	int time;
	int range;
	String sp;
	public TerranUnit(){
		life = 1;
		energy = 2;
		shield = "무적";
		range = 999999999;
		meneral = 500;
		gas = 9999999;
		supply = 99999999;
		time = 999999;
		sp = "적삭제";
	}
}

